
#include "Tuple.h"
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

struct sTuple
{
	Key clave;
	Data dato;
};

/* constructor */
Tuple tuple_fromKeyData (Key k, Data s)
{
	Tuple tupla;
	
	if(k == NULL)
		return NULL;
	if(s == NULL)
		return NULL;
	
	tupla = (Tuple)calloc(1,sizeof(struct sTuple));
	
	if(tupla == NULL)
		return NULL;
	
	
	tupla -> clave = key_clone(k);
	
	tupla -> dato = data_clone(s);
	
	return tupla;	
}

Key
tuple_fst (Tuple t)
{
	return key_clone(t -> clave);
}

Data
tuple_snd (Tuple t)
{
	return data_clone(t -> dato);
}

Tuple
tuple_destroy(Tuple t)
{
	if(t == NULL)
		return NULL;
	key_destroy(t -> clave);
	data_destroy(t -> dato);
	free(t);
	t = NULL;
	return NULL;
}

Tuple
tuple_clone (Tuple t)
{
	if(t == NULL)
		return NULL;
	return tuple_fromKeyData(t -> clave,t -> dato);
}
